#控制結構
特性:根據條件執行不同的代碼塊。
機制:評估條件表達式,如果為真,執行相應代碼塊。
用途:進行條件判斷和分支處理。
function checkAge(age) {
if (age >= 18) {
console.log("您是成年人");
} else if (age >= 13) {
console.log("您是青少年");
} else {
console.log("您是兒童");
}
}
checkAge(20);
// 輸出: 您是成年人
特性:基於不同的情況執行不同的代碼塊。
機制:比較 switch 表達式與 case 子句的值,執行匹配的 case。
用途:當有多個分支條件時,比 if...else 更清晰。
function getDayName(dayNumber) {
switch (dayNumber) {
case 1:
return "星期一";
case 2:
return "星期二";
// ... 其他天
case 7:
return "星期日";
default:
return "無效的日期";
}
}
console.log(getDayName(3));
// 輸出: 星期三
特性:重複執行代碼塊指定的次數。
機制:初始化、條件檢查、更新三個部分組成。
用途:適用於已知迭代次數的情況。
(可以使用 break 提前退出,使用 continue 跳過當前迭代)
for (let i = 0; i < 5; i++) {
console.log(`${i}`);
}
// 輸出:
// 0
// 1
// 2
// 3
// 4
特性:當條件為真時重複執行代碼塊。
機制:每次迭代前檢查條件。
用途:適用於不確定迭代次數的情況。
let count = 0;
while (count < 3) {
console.log(`count: ${count}`);
count++;
}
// 輸出:
// count: 0
// count: 1
// count: 2
特性:至少執行一次代碼塊,然後在條件為真時重複。
機制:先執行一次代碼塊,然後檢查條件。
用途:當你需要代碼塊至少執行一次時使用。
let x = 0;
do {
console.log(`x: ${x}`);
x++;
} while (x < 3);
// 輸出:
// x: 0
// x: 1
// x: 2
機制:遍歷對象的鍵(包括繼承的屬性)。
用途:主要用於遍歷對象屬性。
(注意:不適用於數組,因為順序不保證,也可能遍歷到原型鏈上的屬性)
const person = { name: "Alice", age: 30, job: "Engineer" };
for (let key in person) {
console.log(`${key}: ${person[key]}`);
}
// 輸出:
// name: Alice
// age: 30
// job: Engineer
特性:遍歷可迭代對象的值。
機制:直接訪問值,而不是索引或鍵。
用途:適用於數組、字符串、Map、Set 等可迭代對象。
const colors = ["red", "green", "blue"];
for (let color of colors) {
console.log(color);
}
// 輸出:
// red
// green
// blue
特性:處理代碼中可能出現的錯誤。
機制:嘗試執行代碼,捕獲並處理錯誤,最後執行清理代碼。
用途:錯誤處理和異常管理。
注意:finally 塊總是會執行,即使有 return 語句。
function divideTwoNumbers(a, b) {
try {
if (b === 0) {
throw new Error("除數不能為零");
}
return a / b;
} catch (error) {
console.error(`錯誤: ${error.message}`);
return null;
} finally {
console.log("計算完成");
}
}
console.log(divideTwoNumbers(10, 2));
// 輸出:
// 計算完成
// 5
console.log(divideTwoNumbers(10, 0));
// 輸出:
// 錯誤: 除數不能為零
// 計算完成
// null
break:立即退出最內層的循環或 switch 語句。
continue:跳過當前迭代的剩餘部分,繼續下一次迭代。
for (let i = 0; i < 5; i++) {
if (i === 2) continue; // 跳過 2
if (i === 4) break; // 在 4 時退出循環
console.log(i);
}
// 輸出:
// 0
// 1
// 3